package com.yunchen.server.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson.JSONObject;
import com.yunchen.server.util.Return;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
@CrossOrigin
public class AuthController {

    /**
     * 用户登录
     */
    @PostMapping("/doLogin")
    public Return doLogin(@RequestBody JSONObject json) {
        Return re = new Return();
        
        try {
            String username = json.getString("username");
            String password = json.getString("password");
            
            // 这里应该根据你的业务逻辑进行用户名密码验证
            // 示例：简单的用户名密码验证
            if ("admin".equals(username) && "123456".equals(password)) {
                // 登录成功，生成token
                StpUtil.login(username);
                re.setCode(200);
                re.setMsg("登录成功");
                re.setData(StpUtil.getTokenValue());
            } else {
                re.setCode(400);
                re.setMsg("用户名或密码错误");
            }
        } catch (Exception e) {
            e.printStackTrace();
            re.setCode(500);
            re.setMsg("登录失败");
        }
        
        return re;
    }

    /**
     * 用户登出
     */
    @PostMapping("/doLogout")
    public Return doLogout() {
        Return re = new Return();
        
        try {
            StpUtil.logout();
            re.setCode(200);
            re.setMsg("登出成功");
        } catch (Exception e) {
            e.printStackTrace();
            re.setCode(500);
            re.setMsg("登出失败");
        }
        
        return re;
    }

    /**
     * 获取当前登录用户信息
     */
    @PostMapping("/getUserInfo")
    public Return getUserInfo() {
        Return re = new Return();
        
        try {
            if (StpUtil.isLogin()) {
                String loginId = StpUtil.getLoginIdAsString();
                re.setCode(200);
                re.setMsg("获取成功");
                re.setData(loginId);
            } else {
                re.setCode(401);
                re.setMsg("未登录");
            }
        } catch (Exception e) {
            e.printStackTrace();
            re.setCode(500);
            re.setMsg("获取失败");
        }
        
        return re;
    }
    @PostMapping("/protected")
    public Return protectedEndpoint() {
        Return re = new Return();
        re.setCode(200);
        re.setMsg("访问成功，当前用户ID: " + StpUtil.getLoginIdAsString());
        return re;
    }
}
